package com.example.chessbattleplatform.web.chess_rooms.Pojo.mappers;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.example.chessbattleplatform.web.chess_rooms.Pojo.Enum.AwaitStatusEnum;
import com.example.chessbattleplatform.web.chess_rooms.Pojo.Enum.RoomUserColorEnum;
import com.example.chessbattleplatform.web.chess_rooms.Pojo.Enum.RoomUserEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;


@TableName(value = "room_members", schema = "MY_DATABASE")
@Data // Lombok注解，用于生成getter、setter、equals、hash和toString方法
@NoArgsConstructor // Lombok注解，用于生成无参构造函数
@AllArgsConstructor // Lombok注解，用于生成全参构造函数
@Builder // Lombok注解，用于构建器模式
public class RoomMember {

    // 房间UUID，外键关联
    private String roomUuid;
    // 用户UUID，用户的唯一标识符
    private Long userId;
    // 用户名
    private String userName;
    // 用户头像
    private String avatar;

    // 用户阵营 必须为  BLUE(黑色),RED(红色),GAME_OVER(游戏结束or观众)
    private RoomUserColorEnum userColor;

    // 成员类型（玩家或观战者），
    //    房主 ROOM_OWNER("ROOM_OWNER"),
    //    玩家 GAMER("GAMER"),
    //    观众 SPECTATOR("SPECTATOR");
    private RoomUserEnum memberType;

    // 玩家的当前状态 waiting (等待)/running (运行)/finished (结束)，观战者强制为 finished
    private AwaitStatusEnum playerStatus;

    // 创建时间，默认当前时间戳
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    // 更新时间，每次更新时自动设置为当前时间戳
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}
